const express = require('express');
const router = express.Router();
const check = require('../middleware/check');
var path = require('path');
const db = require('../db')
const { ObjectId } = require('mongodb')
// const ObjectID = require('bson')

const createError = require('http-errors')

// 发表文章
// check.checkLogin  检查用户是否登录 如果没有登陆 就直接返回到登录页面  如果登录了 就执行check.checkLogin后面的代码
router.get('/create', check.checkLogin, (req, res) => {
    res.render('create', { title: ' 尽情绽放你的思维 ', post: {} })
})

router.post('/create', check.checkLogin, async (req, res) => {
    // console.log('req.fields', req.fields);  //包含文章的标题和内容
    // console.log('req.files', req.files);  //包含上传的文件(图片)信息
    //文章数据 （发布文章、读文章） 格式：
    // collectionName: post
    // {
    // _id: ObjectID,
    // title: string,  // 标题
    // author: ObjectID,  // 作者 关联到user文档
    // pv: number,  // 浏览量
    // commentCount: number,  // 评论数量
    // img: string,       // 文章配图的路径
    // content: string   // 正文
    // }

    try {
        // 获取数据
        const { title, content } = req.body;  //标题  和  内容
        // console.log('content：：--', content);
        // console.log('req.body', req.body);
        const authorId = new ObjectId(req.session.user._id);
        const pv = 0, commentCount = 0;
        // console.log(path.win32.basename(req.files.img.path));
        const img = req.files.img.size > 0 ? `/upload/${ path.win32.basename(req.files.img.path) }` : '';
        if (!title || !content) {
            throw new Error('标题和内容不能为空')
        }

        const { insertedId } = await db.addOnePost({
            title, content, authorId, pv, commentCount, img
        })

        req.flash('success', "发表成功")
        return res.redirect(`/post/${ insertedId }`)

    } catch (e) {
        req.flash('error', e.message)
        req.flash('error', "发表失败")
        return res.redirect('back')
    }
})
// 获取单篇文章详情
router.get('/:id', async (req, res, next) => {
    let { id } = req.params
    try {
        id = new ObjectId(id)
    } catch {
        return next(createError('404', "这篇文章不存在"))
    }
    try {
        const post = await db.findOnePost({ _id: id })
        if (!post) {
            return next(createError('404', '您查看的这篇文章不存在'))
        }



        return res.render('post', { title: post.title, post })
    } catch (err) {
        req.flash('error', err.message)
        console.log(err.stack); // 可以看到错误在哪一行
        return res.redirect('back')
    }
    // res.render('post', { title: '文章详情', post: {} });
    // console.log(req.params.id);
})

// 点击编辑修改文章
router.get("/:id/edit", check.checkLogin, async function (req, res, next) {
    // console.log('req.params', req.params);
    let { id } = req.params;
    // console.log('id', id);
    // 根据id找到对应的文章，此处应该有404的验证
    id = new ObjectId(id)

    const post = await db.findOnePost({ _id: id })
    // console.log('post', post);
    // console.log('req.body', req.body);
    // console.log('post.title', post.title);
    return res.render('create', { title: "编辑文章", post })  //把查到的post数据 传给create
})

// 修改后 点击发布 更新文章  
router.post('/:id/edit', async function (req, res, next) {
    // 查看id
    let { id } = req.params;
    // console.log('id', id);
    id = new ObjectId(id);
    // 根据当前的id 找对应的文章，此处应该加入404的校验
    const post = await db.findOnePost({ _id: id })
    // console.log('post', post);
    // 获取用户提交的标题和内容 和图片
    let { title, content } = req.body
    // console.log('title', title);
    // console.log('content', content);
    let img = req.files.img.size > 0 ? `/upload/${ path.win32.basename(req.files.img.path) }` : post.img;

    // 将更新后的数据保存在数据库中
    const result = await db.updateOnePost({ _id: id }, { $set: { title, content, img } })
    req.flash('success', '修改文章成功')


    return res.redirect(`/post/${ id.toString() }`)

})

module.exports = router;
